<!--
 * @Descripttion: 
 * @Version: 
 * @Author: gaohj
 * @Date: 2023-01-04 14:53:49
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2023-01-04 15:42:26
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 向上取整   1.1    => 2  比1.1大的最小整数
        // 向下取整   1.5    => 1  比1.5小的最大整数
        // 四舍五入   1.6    => 2  满五进1
        // console.log(Math.ceil(1.1)); // 2
        // console.log(Math.floor(1.5)); // 1
        // console.log(Math.round(1.6)); //  2

        var arr = [9, 1, 18, 23, 5, 12, 7, 26, 14, 3, 22, 15];
        console.log('原始数组', arr);

        //快速排序
        // 当数组的个数小于等于1时，直接返回这个数组 
        /**
         * @description: 快速排序数组的函数
         * @param {Array} arr  需要排序的数组
         * @return {Array}  排序后的数组
         */
        function quickSort(arr){
            // 写递归的时候，一定要先写出递归的终止条件
            if(arr.length <= 1) return arr;
            // 1.找到数组的中间项的索引
            // 1 2 3 4 5 // 2.找到中间项的值
            // 1 2 3 4 5 6 // 6 / 2

            var middleIndex = Math.floor(arr.length / 2); // 2.5 =>2
            // 根据中间项的索引，找到中间项的值
            // var middleValue = arr.splice(middleIndex, 1); 
            // console.log('中间项的值', middleValue);//得到的是一个只有一个元素的数组
            var middleValue = arr.splice(middleIndex, 1)[0];
            var left=[],right=[];
            // 3.遍历原数组，比中间项的值小的放在左边的数组，比中间项的值大的放在右边的数组
            for(var i=0;i<arr.length;i++){
                if(arr[i] < middleValue){
                    left.push(arr[i]);
                }else{
                    right.push(arr[i]);
                }
            }

            //  []   中间值  [] 
             
            // console.log(left, middleValue, right);


            // return quickSort(left)+middleValue+quickSort(right);
            return quickSort(left).concat(middleValue, quickSort(right));
        }

        console.log(quickSort(arr));

    </script>
</body>

</html>